import { reqCartList, reqDeleteCartListById, reqUpdataCheckedById } from '@/api'
const state = {
  cartList: []
}
const mutations = {
  GETCARTLIST(state, cartList) {
    state.cartList = cartList
  }

}
const actions = {
  // 获取购物车列表数据
  async getCartList({ commit }) {
    let result = await reqCartList()
    // 查看是否获取到购物车数据
    console.log(result);
    if (result.code == 200) {
      commit('GETCARTLIST', result.data)
    }
  },

  // 删除购物车某个商品的数据
  async deleteDeletitCartList({ commit }, skuId) {
    let result = await reqDeleteCartListById(skuId)
    // 请求失败与成功的判定
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },

  //修改购物车商品数据选中状态的数据
  async updatedcheckdById({ commit }, { skuId, isChecked }) {
    let result = await reqUpdataCheckedById(skuId, isChecked)

    // 请求失败与成功的判定
    if (result.code == 200) {
      return 'ok'
    } else {
      return Promise.reject(new Error('faile'))
    }
  },


  //定义删除所有选中商品
  deleteAllCheckedCart_2({ dispatch, getters }) {
    // dispatch：派发action
    //getters： 获取购物车数据
    //获取购物车全部选中的商品（数组，定义变量接收） 
    let PromiseAll = []
    //对购物车数据进行遍历 
    getters.cartList.cartInfoList.forEach(item => {
      //判断商品是否选中，然后调用删除商品的action，删除成功或失败返回一个Promise,
      let promise = item.isChecked == 1 ?
        dispatch('deleteDeletitCartList', item.skuId) : '';
      console.log(promise)

      // 将返回的Promise添加到数组中
      PromiseAll.push(promise)
    })
    // 使用Promise.all方法，全部成功返回为成功，否则为失败
    return Promise.all(PromiseAll)
  },

  // 一键修改全部商品选中状态
  AllCheckedCartList_2({ dispatch, state }, isChecked) {
    // dispatch：派发action
    //state： 获取购物车数据
    let PromiseAll = []
    //数据遍历
    state.cartList[0].cartInfoList.forEach(item => {
      //判断商品是否选中，然后调用修改商品的action，成功或失败返回一个promise
      let promise = dispatch('updatedcheckdById', {
        skuId: item.skuId,
        isChecked
      })

      PromiseAll.push(promise)

    })
    // 最终返回结果
    return Promise.all(PromiseAll)
  }
}
const getters = {
  cartList(state) {
    return state.cartList[0] || {}
  },

}

// 对外暴露在引入大的vuex仓库中
export default {
  state,
  mutations,
  actions,
  getters

}